/**
 * https://www.luogu.com.cn/problem/P1009
 * 运用数组来存储大数并进行计算
 */
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

// 对一个大整数数组进行乘法操作，乘以一个整数 x
void mul(int a[], int x) {
    int carry = 0;  // 进位
    for (int i = 100; i >= 0; i--) {
        int tmp = a[i] * x + carry;
        a[i] = tmp % 10;  // 当前位
        carry = tmp / 10; // 更新进位
    }
}

// 对两个大整数数组进行加法操作，将 b 加到 a 上
void add(int a[], const int b[]) {
    int carry = 0;  // 进位
    for (int i = 100; i >= 0; i--) {
        int tmp = a[i] + b[i] + carry;
        a[i] = tmp % 10;  // 当前位
        carry = tmp / 10; // 更新进位
    }
}

// 对一个大整数数组进行加法操作，将一个整数 x 加到 a 上
void add(int a[], int x) {
    int carry = 0;  // 进位
    for (int i = 100; i >= 0; i--) {
        int tmp = a[i] + x % 10 + carry;
        a[i] = tmp % 10;  // 当前位
        carry = tmp / 10; // 更新进位
        x /= 10;          // 移动到下一个十进制位
    }
}

// 打印大整数数组，忽略前导零
void print(const int a[], const size_t size) {
    bool flag = false;  // 用于标记是否遇到第一个非零位
    for (size_t i = 0; i < size; i++) {
        if (a[i] != 0) flag = true;
        if (flag) cout << a[i];
    }
}

int main() {
    int n;
    cin >> n;  // 输入一个整数 n
    int sum[101] = {0};  // 用于存储阶乘和的数组
    int pre[101] = {0};  // 用于存储当前阶乘的数组
    pre[100] = 1;  // 初始化为 1 的原因是阶乘从 1 开始

    // 计算 1! + 2! + ... + n!
    for (int i = 1; i <= n; i++) {
        mul(pre, i);    // 计算 i!
        add(sum, pre);  // 将 i! 加到 sum 上
    }

    // 打印阶乘和
    print(sum, 101);
}
